#1
#函数
def spmGifts():
    for i in range(1,5):
        print(f'第{i}次输入')
        a = int(input('请输入年龄：'))
        if a >= 99:
            print('gongxi')
            if a <= 111:
                print('!')
            elif a <= 222:
                print('!!')
            elif a <= 333:
                print('!!!')
            else:
                print("!!!!!!!")
        elif a >= 77:
            print('clv')
        elif a >= 55:
            print('5555')
        elif a >= 33:
            print('3')
        elif a >= 0:
            print('?')
        else:
            print('no')
        print('over')
#函数：求阶乘
def jiecheng(n):
    x = 1
    if n >1:
        for i in range(1,n+1):
            x=x*i
    return x
#函数：求阶乘2，递归
def jc(n):
    if n>0:
        z=n*jc(n-1)
        return z
    else:
        return 1
#函数：打印不定长的元组和字典
def tH(*t,**d):
    print(t)
    print(d)
###在一个函数中定义一个函数，且返回该函数：闭包
#装饰器作用：在不动源代码的情况下实现新功能的追加，常说打补丁
#步骤：1.定义一个闭包
# 2.在需要增加补丁的函数头上加上语法糖@并写上装饰器的名称
#原理：在原函数被调用的时候，先检查该函数头上是否有语法糖，
# 如果有则将该函数名作为参数传给装饰器并调用，同时得到内部函数inner，
#因正执行函数的调用，故继续调用inner函数，从而执行内部的本地函数。
def out1(f):
    def in1(*t):
        print('start')
        print(f(*t))
        print('end')
    return in1
#函数：求a+b之和
@out1
def sumSum(a,b):
    c=a+b
    return c
#求a-b
@out1
def jian(a,b):
    return a-b


#对于函数体中只有一行代码且有返回值的函数，可以定义为匿名函数
f=lambda a,b:a+b
# 在一个函数中定义一个函数，且返回函数：闭包
def outer():
    print('out')
    def inner():
        print('in')
    return inner

if __name__ =='__main__':
    # spmGifts()
    # print(jiecheng(0))
    # print(jiecheng(2))
    # tH('a','b','c','a','n',a=10)
    # print(sumSum(3,6))

    # i=outer()
    # print(i)
    # i()
    sumSum(3,9)
    jian(9,5)